/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package op;

import core.QuebraString;
import java.util.Date;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author Jônatas
 */
class QuebraStringPabxVicol implements QuebraString {

    Pattern numeros = Pattern.compile("[0-9]+");

    public QuebraStringPabxVicol() {
    }

    public EntradaAbstrata quebraString(Map<String, Object> parametersMap) throws Exception {

        Telefone origem = (Telefone) parametersMap.get("origem");
        String valorStr = parametersMap.get("valor").toString();

        String temp = valorStr.replace(',', '.');

        if (temp.startsWith(".")) {
            temp = "0" + temp;
        }

        double valor = Double.parseDouble(temp);
        String line = parametersMap.get("line").toString();
        boolean temValor = ((Boolean) parametersMap.get("temValor")).booleanValue();

        EntradaAbstrata entrada = null;

        StringTokenizer tokenizer = new StringTokenizer(line);

        String tipo = tokenizer.nextToken() + " " + tokenizer.nextToken();

        Date data = EntradaAbstrata.criaDate(tokenizer.nextToken(), tokenizer.nextToken());

        Integer duracao = EntradaAbstrata.getDuracaoLigacaoSegundos(tokenizer.nextToken());

        temp = tokenizer.nextToken();

        Matcher match = numeros.matcher(temp);

        if (!match.find()) {
            temp = tokenizer.nextToken();
        }

        String telefoneStr = temp;

        String destinoStr = "";

        if (telefoneStr.length() == 8) {
            destinoStr = "035";
        }

        destinoStr += telefoneStr;

        Telefone destino = null;
        if (destinoStr.length() == 11) {
            destino = new Telefone(destinoStr);
        } else {
            destino = new Telefone(destinoStr, true);
        }

        String descricao = "";

        if (temValor) {
            int inicio = line.indexOf(telefoneStr) + telefoneStr.length();
            int fim = line.indexOf(valorStr);

            descricao = line.substring(inicio, fim);

        } else {
            int inicio = line.indexOf(telefoneStr) + telefoneStr.length();
            descricao = line.substring(inicio);
        }

        entrada = new Ligacao();

        entrada.setCusto(valor);
        entrada.setDataOrigemLigacao(data);
        entrada.setDestino(destino);
        entrada.setDuracaoLigacaoSegundos(duracao);
        entrada.setNumeroDeOrigem(origem);
        entrada.setPlanoLigacao(tipo);
        entrada.setTipoDeLigacao(tipo);
        entrada.setLocalDaLigacao(descricao);

        return entrada;
    }
}
